﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DotLink;
using DotBusiness.Models;

namespace JAVALI_Cardapio_Atendimento
{
    public partial class FrmCadastrarProduto : Form
    {
        public Form Before { get; set; }
        private string[] tipos;

        #region Construtor
        public FrmCadastrarProduto()
        {            
            InitializeComponent();
        }
        #endregion

        #region Métodos

        /// <summary>
        /// Carregamento inicial do formulário cadastro de Produtos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmCardapioCadastrarProduto_Load(object sender, EventArgs e)
        {
            tipos = Bag.Cardapio.comboTipo();
            //Combo de Categorias de Produtos - Prato e Bebida, que vêm preenchido assim que o formulário é inicializado
            string[] arrCategoriaProduto = new string[2];
            arrCategoriaProduto[0] = "Prato";
            arrCategoriaProduto[1] = "Bebida";
            cbCategoriaProduto.DataSource = new BindingSource(arrCategoriaProduto, null);

            cbTipoProduto.DataSource = tipos;
            dtProdutos.DataSource = (JProduto[])Bag.JProdutos_Array();

        }

        /// <summary>
        /// No clique do botão Cadastrar, o cadastro de Produto é efetuado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAdicionarTipoProduto_Click(object sender, EventArgs e)
        {
            try
            {
                string nomeProduto = txtNomeProduto.Text, tempoPreparoProduto = txtTemPreparoProduto.Text;

                if (!String.IsNullOrEmpty(nomeProduto) && !String.IsNullOrEmpty(tempoPreparoProduto))
                {
                    string[] arr = new string[2];
                    arr[0] = txtNomeProduto.Text;
                    arr[1] = txtTemPreparoProduto.Text;

                    string nome, tipo, categoria;
                    int tempo;

                    try
                    {
                        tempo = Int32.Parse(txtTemPreparoProduto.Text);
                        nome = txtNomeProduto.Text;
                        tipo = cbTipoProduto.Text;
                        categoria = cbCategoriaProduto.Text;

                        Bag.Cardapio.adicionarProduto(nome, tempo, tipo, categoria);

                        dtProdutos.DataSource = Bag.JProdutos_Array();
                        MessageBox.Show("Produto Cadastrado!", "Javali - Cardápio");
                    }
                    catch
                    {
                        MessageBox.Show("O tempo de preparo deve ser em minutos.");
                    }
                }
                else
                {
                    MessageBox.Show("Digite todos os campos para o cadastro!");
                }
            }
            catch
            {
                MessageBox.Show("Cadastro não efetuado, tente novamente!");
            }
            
        }

        /// <summary>
        /// No clique do botão Voltar, retorna para o Menu de Cardápio e fecha o formulário atual de Cadastro de Produtos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnVoltar_Click(object sender, EventArgs e)
        {
            this.Before.Show();
            this.Hide();
        }

        /// <summary>
        /// No evento de "keypress" (pressionar do teclado), o textbox de quantidade de produtos só permite ser digitado números
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtTemPreparoProduto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        /// <summary>
        /// No clique do link de Voltar, retorna para o Menu de Cardápio, e o formulário de Cadastro de Produtos é fechado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkVoltarMenuCardapio_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.Before.Show();
            this.Hide();
        }

        /// <summary>
        /// No clique do botão Ok, retorna para o Menu de Cardápio, e o formulário de Cadastro de Produtos é fechado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOkProduto_Click(object sender, EventArgs e)
        {
            this.Before.Show();
            this.Hide();
        }
        #endregion

        private void cbTipoProduto_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void FrmCadastrarProduto_Shown(object sender, EventArgs e)
        {
            if (tipos.Length == 0)
            {
                this.Hide();
                MessageBox.Show("Não há tipos cadastrados.\n Cadastre um tipo primeiro antes de cadastrar um produto.");
                FrmCadastrarTipo cadTipoProduto = new FrmCadastrarTipo();
                cadTipoProduto.Before = this.Before;
                cadTipoProduto.Show();
                return;
            }
        }
    }
}
